﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LightingTcpService
{
    public class ImageFile
    {
        public string Name { get; set; }
        public byte[] File { get; set; }
    }

    public class ImageModel : ICloneable
    {
        public string Key { get; set; }
        public string Name { get; set; }
        public double Width { get; set; }
        public double Height { get; set; }
        public long Length { get; set; }
        public string Format { get; set; }

        public object Clone()
        {
            return this.MemberwiseClone();
        }
    }

    public interface IImageProvider
    {
        ImageFile GetImageFile(string name);
        ImageFile GetImageFileByKey(string key);
        ImageModel GetImageModel(string key);
        ImageModel GetImageModelByName(string name);
        
    }

    public class WorkbookModel : IImageProvider
    {
        private List<ImageFile> _imageFiles;
        private List<ImageModel> _imageModels;

        public CompressItem ExcelFile { get; internal set; }

        public List<ImageFile> ImageFiles
        {
            get
            {
                if (_imageFiles == null)
                {
                    _imageFiles = new List<ImageFile>();
                }
                return _imageFiles;
            }
        }

        public List<ImageModel> ImageModels
        {
            get
            {
                if (_imageModels == null)
                {
                    _imageModels = new List<ImageModel>();
                }
                return _imageModels;
            }
        }

        public ImageFile GetImageFile(string name)
        {
            return (from r in ImageFiles
                    where r.Name == name
                    select r).FirstOrDefault();
        }

        public ImageModel GetImageModel(string key)
        {
            return (from r in ImageModels
                    where r.Key == key
                    select r).FirstOrDefault();
        }

        public ImageModel GetImageModelByName(string name)
        {
            return (from r in ImageModels
                    where r.Name == name
                    select r).FirstOrDefault();
        }

        public ImageFile GetImageFileByKey(string key)
        {
            ImageModel model = GetImageModel(key);
            if (model != null)
            {
                return GetImageFile(model.Name);
            }
            return null;
        }
    }
}
